#include<iostream>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<string>
using namespace std;

int main()
{
  //1.创建管道
   int fds[2] = {0};
   int n = pipe(fds);//fds输出型参数
   if(n != 0) //-1表示失败
   {
      cerr << "pipe error" << endl;
      return 1;
   }
   //创建进程
   pid_t id = fork();
   if(id < 0)
   {
      cerr << "fork error" << endl;
      return 2;
   }
   else if(id == 0) //子进程要写
   {
       //关闭读
       close(fds[0]);
       int cnt = 0;
       while(true)
       {
         string message = "hello bit, hello ";
         message += to_string(getpid()); 
         message += ",";
         message += to_string(cnt);
         //写入管道
         ::write(fds[1],message.c_str(),message.size());
         cnt++;
         sleep(1);
       }
      exit(0); 
   }
   else //父进程 要读
   {
    //关闭写
    close(fds[1]);
    char buffer[1024];
    while(true)
    {
      ssize_t n = ::read(fds[0],buffer,1024);
      if(n > 0)
      {
        buffer[n] = 0;
        cout << "child->father" << buffer << endl;
      }

    }
    //等待
    pid_t rid = waitpid(id,nullptr,0);
    cout << "father wait child:" << rid << endl;
   }

    return 0;
}